package service;

import java.io.IOException;
import java.sql.Connection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import model.Adresse;
import model.Teilnehmer;
import model.Termin;
import dao.jdbc.AdresseJdbcDao;
import dao.jdbc.TeilnehmerJdbcDao;
import dao.jdbc.TerminJdbcDao;

public class TerminplanerService {

  private TerminJdbcDao terminplanerdao;
  private AdresseJdbcDao adressdao;
  private TeilnehmerJdbcDao teilnehmerdao;
  private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
  private static final SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
  
  public final static TerminplanerService getInstanz() {
    return instanz;
  }

  private static final TerminplanerService instanz = new TerminplanerService();

  private TerminplanerService() {
    terminplanerdao = new TerminJdbcDao();
    adressdao = new AdresseJdbcDao();
    teilnehmerdao = new TeilnehmerJdbcDao();
  }

  public ArrayList<Termin> getTermine(Connection con) throws IOException {
    ArrayList<Termin> termine = null;
    termine = terminplanerdao.findAll(con);
    return termine;
  }

  public Termin getTermin(Connection con, Long terminId) throws IOException {
    Termin termin = null;
    termin = terminplanerdao.findById(con, terminId);
    return termin;
  }

  public Adresse getAdresseByTerminId(Connection con, Long terminId) throws IOException {
    Adresse adresse = null;
    adresse = adressdao.findByTerminId(con, terminId);
    return adresse;
  }

  public ArrayList<Teilnehmer> getTeilnehmerByTerminId(Connection con, Long terminId) throws IOException {
    ArrayList<Teilnehmer> teilnehmer = null;
    teilnehmer = teilnehmerdao.findByTerminId(con, terminId);
    return teilnehmer;
  }

  public void deleteTeilnehmer(Connection con, Teilnehmer teilnehmer) throws IOException {
    teilnehmerdao.delete(con, teilnehmer);
  }

  public void saveTeilnehmer(Connection con, Teilnehmer teilnehmer) throws IOException {
    teilnehmerdao.save(con, teilnehmer);
  }

  public void deleteTermin(Connection con, Termin termin) throws IOException {
    terminplanerdao.delete(con, termin);
  }

  public void saveTermin(Connection con, Termin termin) throws IOException {
    terminplanerdao.save(con, termin);
  }

  public Teilnehmer getTeilnehmerById(Connection con, Long id) throws IOException {
    Teilnehmer teilnehmer = null;
    teilnehmer = teilnehmerdao.findById(con, id);
    return teilnehmer;
  }

  public Date parseStringtoDateWithTime(String string) throws IllegalArgumentException{
    Date result = null;
    if(string != null)
    try {
      result = sdf.parse(string);
    } catch (ParseException e) {
      throw new IllegalArgumentException("Falsches Datumsformat eingegeben!");
    }
    return result;
  }
  
  public Date parseStringtoDateWithoutTime(String string) throws IllegalArgumentException{
    Date result = null;
    if(string != null)
    try {
      result = sdf2.parse(string);
    } catch (ParseException e) {
      throw new IllegalArgumentException("Falsches Datumsformat eingegeben!");
    }
    return result;
  }
  
}


